From: Yang Hongyang Date: Thu, 14 May 2015 08:55:17 +0000 (+0800) Subject: libxc/restore: introduce setup() and cleanup() on restore X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~3237 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=ce44b40387d787f3c608c2bd0c39285971b8aea3;p=xen.git libxc/restore: introduce setup() and cleanup() on restore introduce setup() and cleanup() which subsume the ctx->restore.ops.{setup,cleanup}() calls and also do memory alloc/free. Signed-off-by: Yang Hongyang CC: Andrew Cooper CC: Ian Campbell CC: Ian Jackson CC: Wei Liu Reviewed-by: Andrew Cooper Acked-by: Ian Campbell --- diff --git a/tools/libxc/xc_sr_restore.c b/tools/libxc/xc_sr_restore.c index 8022c3dac3..2345f66081 100644 --- a/tools/libxc/xc_sr_restore.c +++ b/tools/libxc/xc_sr_restore.c @@ -510,6 +510,38 @@ static int process_record(struct xc_sr_context *ctx, struct xc_sr_record *rec) return rc; } +static int setup(struct xc_sr_context *ctx) +{ + xc_interface *xch = ctx->xch; + int rc; + + rc = ctx->restore.ops.setup(ctx); + if ( rc ) + goto err; + + ctx->restore.max_populated_pfn = (32 * 1024 / 4) - 1; + ctx->restore.populated_pfns = bitmap_alloc( + ctx->restore.max_populated_pfn + 1); + if ( !ctx->restore.populated_pfns ) + { + ERROR("Unable to allocate memory for populated_pfns bitmap"); + rc = -1; + goto err; + } + + err: + return rc; +} + +static void cleanup(struct xc_sr_context *ctx) +{ + xc_interface *xch = ctx->xch; + + free(ctx->restore.populated_pfns); + if ( ctx->restore.ops.cleanup(ctx) ) + PERROR("Failed to clean up"); +} + #ifdef XG_LIBXL_HVM_COMPAT extern int read_qemu(struct xc_sr_context *ctx); #endif @@ -524,19 +556,10 @@ static int restore(struct xc_sr_context *ctx) IPRINTF("Restoring domain"); - rc = ctx->restore.ops.setup(ctx); + rc = setup(ctx); if ( rc ) goto err; - ctx->restore.max_populated_pfn = (32 * 1024 / 4) - 1; - ctx->restore.populated_pfns = bitmap_alloc( - ctx->restore.max_populated_pfn + 1); - if ( !ctx->restore.populated_pfns ) - { - ERROR("Unable to allocate memory for populated_pfns bitmap"); - goto err; - } - do { rc = read_record(ctx, &rec); @@ -571,10 +594,7 @@ static int restore(struct xc_sr_context *ctx) PERROR("Restore failed"); done: - free(ctx->restore.populated_pfns); - rc = ctx->restore.ops.cleanup(ctx); - if ( rc ) - PERROR("Failed to clean up"); + cleanup(ctx); if ( saved_rc ) {